iT邦幫忙

2021 iThome 鐵人賽

DAY 16
2
自我挑戰組

一起用python寫UI系列 第 16

Day16 用python寫UI-聊聊Binding events

  • 分享至 

  • xImage
  •  

綁定事件就是可以回傳在執行時的動作位置,雖然說有很多的不同事件可以使用,但是要注意,當滑鼠與鍵盤同時綁定時會出現小陷阱,下面會有實例跟大家說明要怎麼解決這個問題喔~

語法:widget.bind(event,handler)

♠♣今天的文章大綱♥♦

  • 相關事件
  • 滑鼠綁定
  • 鍵盤與滑鼠綁定

相關事件

python tk 的事件有分成三種,滑鼠鍵盤跟控建

滑鼠事件:

<Button-1>

點選滑鼠一下,python shell印出當前點選的座標xy。1是點滑鼠左鍵,2是點滑鼠中間鍵,3是點右鍵,4是滑鼠滑輪向上滾動,5是滑鼠滑輪向下滾動。

<B1-Motion>

拖曳,按住滑鼠,python shell印出當前點選的座標xy。1是點滑鼠左鍵,2是點滑鼠中間鍵,3是點右鍵。

<ButtonRelease-1>

放開滑鼠,,python shell印出當前點選的座標xy。1是點滑鼠左鍵,2是點滑鼠中間鍵,3是點右鍵。

<Double-Button-1>

連按2下滑鼠,python shell印出當前點選的座標xy。1是點滑鼠左鍵,2是點滑鼠中間鍵,3是點右鍵。

<Motion>

滑鼠移動,python shell印出當前點選的座標xy。

<Enter>

滑鼠游標進入 Widget 控件。

<Leave>

滑鼠游標離開 Widget 控件。

鍵盤事件:

<Focusin>

鍵盤焦點進入 Widget 控件。

<FocusOut>

鍵盤焦點離開 Widget 控件。

<Return>

按下 Enter 鍵,鍵盤所有間接可以被綁定。

<Key>

按下某鍵盤鍵,鍵值會被儲存在 event 物件中傳遞。

<Shift-Up>

按住 Shift 鍵時按下 Up 鍵。

<Alt-Up>

按住Alt 鍵時按下 Up 鍵。

<Ctrl-Up>

按住Ctrl 鍵時按下 Up 鍵。

控見事件:

<Configure>

新控件大小的 width 與 height 會存在event 物件內。


滑鼠綁定

import tkinter as tk

root = tk.Tk()


root.title('cuteluluWindow')
root.configure(bg="#7AFEC6")
root.iconbitmap('heart_green.ico')
root.geometry('300x180')

def cursors(event):
    print("Clicked at", event.x, event.y)

frame=tk.Frame (root, width = 300, height=180,bg="#7AFEC6")
frame.bind("<Button-1>", cursors)
frame.pack()


root.mainloop()

執行結果⬇⬇⬇
這邊滑鼠形狀是我電腦本身的,並不是程式碼裡面有改喔~如果想知道如何改滑鼠形狀可以參考Day6~
https://ithelp.ithome.com.tw/upload/images/20211001/20140047lQVQE5QRKT.png
https://ithelp.ithome.com.tw/upload/images/20211001/20140047BWSVY1nkee.png


鍵盤與滑鼠綁定

import tkinter as tk

root = tk.Tk()
root.title('cuteluluWindow')
root.configure(bg="#7AFEC6")
root.iconbitmap('heart_green.ico')
root.geometry('300x150')

def key(event):
    print ("pressed",repr(event.char))

def cursors(event):
    frame.focus_set() #取得物件焦點
    print ("clicked at", event.x, event.y)

L=tk.Label(root,text="click your cursor first",
            font=("Algerian",15,"bold"),bg='#ADFEDC',fg='#00CACA')
L.pack()

frame = tk.Frame(root, width=300, height=150,bg="#7AFEC6")
frame.bind("<Key>", key)
frame.bind("<Button-1>", cursors)
frame.pack()

root.mainloop()

執行結果⬇⬇⬇
這邊就是會出現小陷阱的地方,當執行這個程式碼時,會發現按鍵盤沒東西跑出來,所以就要在程式碼裡加入 frame.focus_set(),取得物件的焦點後,這樣才可以正常執行喔~但還是要點滑鼠鍵在點鍵盤python shell才會出現位置資訊。
https://ithelp.ithome.com.tw/upload/images/20211001/20140047K7Vp0JwjDu.png
https://ithelp.ithome.com.tw/upload/images/20211001/201400477eA7sahG34.png


今天文章重點就是,當滑鼠與鍵盤同時綁定時,需要多加一行程式碼frame.focus_set(),讓兩個都可以順利地綁定~
/images/emoticon/emoticon12.gif


上一篇
Day15 用python寫UI-聊聊Spinbox
下一篇
Day17 用python寫UI-聊聊Listbox基本操作
系列文
一起用python寫UI30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言